import { splitStringByVisualWidth, substringByVisualWidth } from './string-util.js';
import stringWidth from 'string-width';
import { Logger } from '../utils/logger.js';

const logger = new Logger('[string-util.demo]');

logger.title('演示 string-util.js 功能');

// 示例用法
const myString = '这是一个很长的字符串，包含全角字符：你好世界！😊';

logger.info(`原始字符串: ${myString}`);
logger.info(`原始字符串视觉宽度: ${stringWidth(myString)}`);

logger.blank();

const result = splitStringByVisualWidth(myString, 20);
logger.info(`根据视觉宽度20分割字符串: ['${result.join("', '")}']`);

// 示例 1: 从视觉宽度 0 开始，截取视觉长度 10
const sub1 = substringByVisualWidth(myString, 0, 10);
logger.info(`从视觉宽度 0 开始，截取视觉长度 10: "${sub1}" (视觉宽度: ${stringWidth(sub1)})`);
// 预期输出: "这是一个很" (视觉宽度: 10)

// 示例 2: 从视觉宽度 10 开始，截取视觉长度 8
const sub2 = substringByVisualWidth(myString, 10, 8);
logger.info(`从视觉宽度 10 开始，截取视觉长度 8: "${sub2}" (视觉宽度: ${stringWidth(sub2)})`);
// 预期输出: "长的字符" (视觉宽度: 8)

// 示例 3: 从视觉宽度 20 开始，截取视觉长度 12
const sub3 = substringByVisualWidth(myString, 20, 12);
logger.info(`从视觉宽度 20 开始，截取视觉长度 12: "${sub3}" (视觉宽度: ${stringWidth(sub3)})`);
// 预期输出: "包含全角字符" (视觉宽度: 12)

// 示例 4: 从视觉宽度 40 开始，截取到字符串末尾 (不提供 lengthVisualWidth)
const sub4 = substringByVisualWidth(myString, 40);
logger.info(`从视觉宽度 40 开始，截取到末尾: "${sub4}" (视觉宽度: ${stringWidth(sub4)})`);
// 预期输出: "世界！😊" (视觉宽度: 9)

// 示例 5: 从视觉宽度 10 开始，截取到字符串末尾 (不提供 lengthVisualWidth)
const sub5 = substringByVisualWidth(myString, 10);
logger.info(`从视觉宽度 10 开始，截取到末尾: "${sub5}" (视觉宽度: ${stringWidth(sub5)})`);
// 预期输出: "长的字符串，包含全角字符：你好世界！😊" (视觉宽度: 40)

// 示例 6: 起始视觉宽度超出字符串总视觉宽度
const sub6 = substringByVisualWidth(myString, 100, 10);
logger.info(`从视觉宽度 100 开始，截取视觉长度 10: "${sub6}" (视觉宽度: ${stringWidth(sub6)})`);
// 预期输出: "" (视觉宽度: 0)

// 示例 7: 截取视觉长度为 0
const sub7 = substringByVisualWidth(myString, 0, 0);
logger.info(`从视觉宽度 0 开始，截取视觉长度 0: "${sub7}" (视觉宽度: ${stringWidth(sub7)})`);
// 预期输出: "" (视觉宽度: 0)

// 示例 8: lengthVisualWidth 为 null
const sub8 = substringByVisualWidth(myString, 20, null);
logger.info(
  `从视觉宽度 20 开始，lengthVisualWidth 为 null: "${sub8}" (视觉宽度: ${stringWidth(sub8)})`
);
// 预期输出: "包含全角字符：你好世界！😊" (视觉宽度: 29)
